#define leddriver_t
#include "leddriver.h"

#define SCLK_Set() {FL_GPIO_SetOutputPin(GPIOB, FL_GPIO_PIN_9);AipDelay();}
#define SCLK_Reset() {FL_GPIO_ResetOutputPin(GPIOB, FL_GPIO_PIN_9);AipDelay();}

#define DIN_Set() {FL_GPIO_SetOutputPin(GPIOB, FL_GPIO_PIN_10);AipDelay();}
#define DIN_Reset() {FL_GPIO_ResetOutputPin(GPIOB, FL_GPIO_PIN_10);AipDelay();}

#define DATACMD 0b01000000	// 0x40
#define ADDRCMD 0b11000000	// 0xC0
#define CMDDISP	0b10001111	// 0x8F

void AipDelay(void)
{
    uint8_t i;
    
    for (i=0; i<22; i++)
    {
        __NOP();
    }   
}

void Start(void)
{
	DIN_Set();
	SCLK_Set();
	DIN_Reset();
}

void End(void)
{
	DIN_Reset();
	SCLK_Set();
	DIN_Set();
}

void SendData(uint8_t data)
{
	uint8_t i = 0;
	
	for(i=0 ; i<8 ; i++)
	{
		SCLK_Reset();
		if(data & 0x01)
		{
			DIN_Set();
		}
		else
		{
			DIN_Reset();
		}
		SCLK_Set();
		data >>= 1;
	}

}


void LED_Driver(void)
{
	uint8_t i = 0;

	Start();
	SendData(DATACMD);
	End();
	Start();
	SendData(ADDRCMD);
	for(i=0 ; i<GRIDCNT ; i++)
	{
		SendData(AipBuf[i]);
	}
	End();
	
	Start();
	SendData(CMDDISP);
	End();
}

